#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Filename: dir_create.py
# Author: ChenChangSong
# Date: 2025-08-24

"""
功能描述: 创建测试用例目录
https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/add_tcase_category.html
"""
import sys
import os
import time
import random
from comm.common_code import *

def dir_create(dir_name, parent_id='',max_retries=5):
    """创建目录并返回新目录ID
    :param dir_name: 目录名称
    :param parent_id: 父目录ID
    :param max_retries: 最大重试次数
    :return: 目录ID或None（如果创建失败）
    """
    excel_data = get_excel_data()
    time.sleep(0.5)
    url = "https://api.tapd.cn/tcase_categories"

    payload = {
        'access_token': excel_data['access_token'], 
        'workspace_id': excel_data['项目ID'],  # 项目ID（必填）
        'name': dir_name,  # 目录名称(必填)
        'description': '',  # 目录描述
        # 'parent_id': parent_id,  # 父目录ID,无则默认在'所有的'建（注意一级目录输入会报错）
        'creator': excel_data['创建人']  # 创建人
    }
    # 非根目录时
    if parent_id and parent_id != '0' and parent_id != 0 and parent_id != '':
        payload['parent_id'] = parent_id
    
    # 添加重试机制
    retry_count = 0
    while retry_count < max_retries:
        # 创建目录/默认根目录
        logger.info(f'创建测试用例目录:{dir_name}父目录ID:{parent_id}↓↓↓=================================================↓↓↓')
        response_code, response = api_request(method='POST', url=url, headers={}, data=payload)
        logger.info(f"响应内容: {response}")
        
        if response_code == 200:
            # 提取目录ID
            dir_id = response['data']['TcaseCategory']['id']
            logger.info(f"创建成功，目录ID: {dir_id}")
            logger.info(f'↑↑↑=================================================↑↑↑')
            return dir_id
        elif response_code == 429:
            # API限流，等待后重试
            wait_time = (2 ** retry_count) + random.random()
            logger.warning(f"API限流，等待 {wait_time:.2f} 秒后重试 (尝试 {retry_count + 1}/{max_retries})")
            time.sleep(wait_time)
            retry_count += 1
        else:
            logger.error(f"创建失败，响应状态码: {response_code}，响应内容: {response}")
            logger.info(f'↑↑↑=================================================↑↑↑')
            return None
    
    # 达到最大重试次数仍然失败
    logger.error(f"创建目录 '{dir_name}' 失败，已达最大重试次数")
    logger.info(f'↑↑↑=================================================↑↑↑')
    return None

if __name__ == "__main__":
    dir_create(dir_name='测试目录23', parent_id='1166606973001016094')
